package com.buddy.learn.algorithm.simple;

import java.util.Arrays;

/**
 * 插入排序
 * @author Buddy
 * @date 2021/4/20
 */
public class _排序04_插入排序 {

    public static void main(String[] args) {
        int[] arr = {5, 4, 3, 4, 3, 2};
        arr = insertSort(arr);
        System.out.println(Arrays.toString(arr));

    }

    /**
     *  5，4，3，4，3，2     0~0
     *  4，5，3，4，3，2     0~1
     *  4，3，5
     *  3，4，5             0~2
     *  3，4，4，5，3，2     0~3
     *
     */
    private static int[] insertSort(int[] arr) {
        int count = 0;
        // 从 i 前向后
        for (int i = 0; i < arr.length - 1; i++) {
            // 从 i+1 向前看
            for (int j = i + 1; j > 0; j--) {
                if (arr[j - 1] > arr[j]) {
                    int temp = arr[j];
                    arr[j] = arr[j - 1];
                    arr[j - 1] = temp;
                } else {
                    // 优化，当插入的值大于已经排序好的部分数据的最大值，就不用子循环，最好情况下是 O(n)
                    break;
                }
                count++;
            }
        }
        System.out.println(count);
        return arr;
    }

}
